package com.phiture.erp.produce.core.service;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import com.phiture.erp.produce.core.pojo.dto.ErpCreateMaterialRequirementPlanDTO;
import com.phiture.erp.produce.dal.pojo.dto.ErpMaterialRequirementPlanPageReqDTO;
import com.phiture.erp.produce.core.pojo.dto.ErpMaterialRequirementPlanSaveReqDTO;
import com.phiture.erp.produce.core.pojo.dto.ErpMaterialRequirementPlanUpdateStatusDTO;
import com.phiture.erp.produce.core.pojo.vo.ErpMaterialRequirementPlanItemVO;
import com.phiture.erp.produce.dal.pojo.vo.ErpMaterialRequirementPlanVO;
import com.phiture.erp.produce.dal.entity.ErpMaterialRequirementPlanDO;
import com.phiture.erp.produce.dal.entity.ErpMaterialRequirementPlanItemsDO;
import com.phiture.erp.produce.dal.pojo.vo.ErpMaterialRequirementPlanRespVO;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 物料需求计划 Service 接口
 *
 * @author YH
 */
public interface ErpMaterialRequirementPlanService {

    /**
     * 创建物料需求计划
     *
     * @param createReqDTO 创建信息
     * @return 编号
     */
//    Long createMaterialRequirementPlan(ErpMaterialRequirementPlanSaveReqDTO createReqDTO);
    void createMaterialRequirementPlan(ErpCreateMaterialRequirementPlanDTO planDTO);

    /**
     * 更新物料需求计划
     *
     * @param updateReqDTO 更新信息
     */
    void updateMaterialRequirementPlan(ErpMaterialRequirementPlanSaveReqDTO updateReqDTO);
    void updateStatus(ErpMaterialRequirementPlanUpdateStatusDTO updateReqDTO);

    /**
     * 删除物料需求计划
     *
     * @param id 编号
     */
    void deleteMaterialRequirementPlan(Long id);

    /**
     * 获得物料需求计划
     *
     * @param id 编号
     * @return 物料需求计划
     */
    ErpMaterialRequirementPlanDO getMaterialRequirementPlan(Long id);

    /**
     * 获得物料需求计划分页
     *
     * @param pageReqDTO 分页查询
     * @return 物料需求计划分页
     */
    PageResult<ErpMaterialRequirementPlanRespVO> getMaterialRequirementPlanPage(ErpMaterialRequirementPlanPageReqDTO pageReqDTO);

    ErpMaterialRequirementPlanVO getInfoById(Long materialRequirementPlanId);
    List<ErpMaterialRequirementPlanItemVO> getItemInfo(Collection<Long> ids);

    List<ErpMaterialRequirementPlanItemsDO> getByItemIds(Collection<Long> itemIds);
    void backfillItemsStatusToReleased(Collection<Long> itemIds);
    void updateIssuedStatus(Long materialRequirementPlanId, Integer issuedStatus);
    void changeIssuedStatus(Collection<Long> materialRequirementPlanIds);
    Map<Long, String> getErpMaterialRequirementPlanMap(Collection<Long> ids);

}